A: Terminal and Shell both need to be setuid root because the children that they fork require ownership of a /dev/ptynn entry. The parent (Terminal or Shell) chown's the /dev/pty entry to the ownership of the user. After the child exit()'s, the parent (Terminal or Shell) chown's the /dev/pty entry back to root.